package com.ruoyi.deal.service;

import com.ruoyi.deal.domain.HyDealCategory;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.deal.bo.HyDealCategoryAddBo;
import com.ruoyi.deal.bo.HyDealCategoryEditBo;
import com.ruoyi.deal.bo.HyDealCategoryQueryBo;
import com.ruoyi.deal.vo.HyDealCategoryVo;
import com.ruoyi.deal.vo.TreeSelect;

import java.util.List;

/**
 * 分类管理Service接口
 *
 * @author lixin
 * @date 2021-05-13
 */
public interface IHyDealCategoryService extends IServicePlus<HyDealCategory> {
	/**
	 * 查询单个
	 * @return
	 */
	HyDealCategoryVo queryById(Integer categoryId);

	/**
	 * 查询列表
	 */
	List<HyDealCategoryVo> queryList(HyDealCategoryQueryBo bo);

	/**
	 * 根据新增业务对象插入分类管理
	 * @param bo 分类管理新增业务对象
	 * @return
	 */
	Boolean insertByAddBo(HyDealCategoryAddBo bo);

	/**
	 * 根据编辑业务对象修改分类管理
	 * @param bo 分类管理编辑业务对象
	 * @return
	 */
	Boolean updateByEditBo(HyDealCategoryEditBo bo);

	/**
	 * 校验并删除数据
	 * @param categoryId 主键
	 * @param isValid 是否校验,true-删除前校验,false-不校验
	 * @return
	 */
	Boolean deleteWithValidById(Integer categoryId, Boolean isValid);

	/**
	 * 是否存在子节点
	 *
	 * @param categoryId 分类ID
	 * @return 结果
	 */
	boolean hasChildByCategoryId(Integer categoryId);

	/**
	 * 构建前端所需要下拉树结构
	 *
	 * @param categories 分类列表
	 * @return 下拉树结构列表
	 */
	List<TreeSelect> buildCategoryTreeSelect(List<HyDealCategory> categories);


	/**
	 * 构建前端所需要树结构
	 *
	 * @param categories 分类列表
	 * @return 树结构列表
	 */
	List<HyDealCategory> buildCategoryTree(List<HyDealCategory> categories);

	/**
	 * 根据品牌ID查询分类树信息
	 *
	 * @param brandId 品牌ID
	 * @return 选中分类列表
	 */
	List<Integer> selectCategoryListByBrandId(Long brandId);

	/**
	 * 获取分类右边列表
	 * @return
	 */
    List<HyDealCategory> selectLeft();

	/**
	 * 根据父类ID获取子类右边列表
	 * @param categoryId
	 * @return
	 */
	List<HyDealCategory> selectRight(Integer categoryId);
}
